编程语言基础概览




桂松涛 Blog
songtaogui@163.com



适用于生物数据分析的编程语言

两语言问题

适用于生物数据分析的编程语言

两语言问题

适用于生物数据分析的编程语言


生信常用语言

  • Shell(Bash): 批处理, 简单流程管理, 作业调度;

  • Perl: 文本操作, 随写随用, 曾经的生信天花板, 现今老年人象征;

  • R: 生态强悍, 统计分析, 原型开发, 数据可视化;

  • Python: 大型应用开发, 生态强悍, Perl/R能做的都能做, 调包侠;

  • Rust/C/C++/GO/Java...: 系统编程、开发性能优化的工具;

  • Julia: 理念先进, 两语言问题的现行解决方案, 但没有金主, 用爱发电, 生态不够, 中文资料等于没有😔;


新入坑推荐路线

  • Shell(Bash) + R <- 新手强推

  • Shell(Bash) + Python <- 新手普通推(带偏见)

  • Shell(Bash) + Perl + R <- Here I am

  • Shell(Bash) + Julia <- My future


编程语言通用概念概览



基础概念

  • 入门概念

  • 变量

  • 数据类型

  • 运算符

  • 函数

  • 流程控制

  • 包/模块

  • ...

进阶概念

  • 变量作用域

  • 模式匹配: 正则表达式

  • 元编程

  • 并行编程, 异步编程

  • 网络和流

  • 编程范式

  • 设计模式

  • ...


编程语言通用基础: 入门概念




  • 交互式会话(REPL)

  • 命令行工具

  • 脚本

  • 包/项目


编程语言通用基础: 变量


变量: 与某个值相关联的名字, 保存一个值, 以供后续代码使用。

# 将 10 赋值给变量x
x = 10

# 使用x进行计算
x + 1

# 重新赋值x
x = 1 + 1
x = "Hello SDAU"

# 变量名
# - 变量名必须以字母、数字、下划线_和句点.组成
# - 变量名的第一个字符不能为数字或者特殊符号
# - 大小写敏感
x=1
X=2
1y=3 # oops!


编程语言通用基础: 数据类型


# 整数Int (Integer)
10, -1, 0

# 浮点数Float
1.2, 0.3, 5.5

# 字符串
"abc", "123", "登高必自"

# 数组 (array), 向量 (vector), 列表(list)
[1,2,3,4]
["a", "b", "c", "d"]
# 混合元素的数组(嵌套数组)
[
    1,
    "a",
    [3, 4],
    "b"
] # 在R中是 列表(list)


# 字典, 哈希表 (在R语言中, 是具名数组, 或具名列表)
dd = Dict(
    # Key => Value, 键 => 值,
    "name"   => "ST.Gui",
    "age"    => 18,
    "height" => 185
)
dd["name"]

# 多维数组, 矩阵
julia> [1 2 3; 4 5 6; 7 8 9]
3×3 Matrix{Int64}:
 1  2  3
 4  5  6
 7  8  9


编程语言通用基础: 运算符


# 基础数学运算: +, -, *, /, ÷, %, ^
2 + 1
2 - 1
2 * 3
3 / 2
3 ÷ 2
3 % 2
2 ^ 3

# 数值比较: ==, !=, <, >, <=, >=

2 == 2
2 >= 1

# 布尔运算(逻辑运算): !, &&, ||

2 > 1 && 2 > 3
2 > 1 || 2 > 3
! (2 > 1)

# 位运算(超纲了, 略过):
# ~, &, |, \xor, \nand, \nor, >>>, >>, <<


编程语言通用基础: 函数


# 编程语言中的函数跟数学中的函数概念类似, y = f(x)
function my_add(x, y)
    x + y
end

my_add(1, 2)

# 可选参数和默认值
using Dates
function Date(y::Int64, m::Int64=1, d::Int64=1)
    err = validargs(Date, y, m, d)
    err === nothing || throw(err)
    return Date(UTD(totaldays(y, m, d)))
end

Date(2023, 10, 26)
Date(2023, 10)
Date(2023)

# 关键字参数
function plot(x, y; style="solid", width=1, color="black", delim=" <=> ")
    return join( [x, y, style, width, color], delim )
end

plot(1, 2)
plot(2, 1)
plot(1, 2, width=2)
plot(1, 2, color="red")


编程语言通用基础: 流程控制


# 判断: if-elseif-else; ?:(三元操作符)

if height > 190
    println("今天就到这吧, 我脖子疼")
elseif height > 170
    println("加个微信吧?")
else
    println("抱一丝, 我有对象了。")
end

score >= 60 ? println("及格了!") : println("不及格!")

# 循环: while; for
i = 1
while i <= 5
    println(i)
    i = i + 1
end

for j in ["a", "b", "c"]
    println(j)
end

# 超纲内容: 
## 异常处理(throw, try/catch)
## 循环结束后操作(finally)
## 提前退出(break, continue)


编程语言通用基础: 模块/包


# 加载别人已经写好的代码集合: 白嫖真香

# julia
using CSV
import CSV

# R
library(ggplot2)

# python
import os
from Branch import m3

# bash
source something.sh

# Perl
use List::Util


拓展学习资料推荐